package interfacesFerrovia;

/**
 * Interface a ser implementada pelo Centro de Controle, que ser� o respons�vel
 * pelo tratamento de eventos gerados pela malha ferrovi�ria. Define os m�todos
 * chamados pela malha ferrovi�ria na ocorr�ncia de cada evento gerado pela
 * malha.. Todo evento tem as seguintes informa��es: - tipo do evento: o tipo de
 * evento � impl�cito pelo m�todo sendo chamado. - id_origem: identifica��o
 * �nica do elemento que gerou o evento (composi��o ou trecho de ferrovia) -
 * instante da ocorr�ncia do evento - dados do evento (cada tipo de evento tem
 * um conjunto pr�prio de dados, descritos junto com cada m�todo.
 * 
 * @author Fernando Vanini
 * 
 */

public interface TratadorDeEventos extends DefsGlobais {

	/**
	 * Evento de alarme gerado por uma composi��o, por falha de opera��o
	 * 
	 * @param idComposicao
	 *            Identifica��o �nica da composi��o
	 * @param instanteAtual
	 *            Instante da ocorr�ncia do evento
	 * @param tipoDeFalha
	 *            Tipo da falha: (Acelera��o, Freio, Outra [ ver defini��es em
	 *            DefsGlobais.java])
	 */
	public void alarmeComposicao(String idComposicao, int instanteAtual,
			TipoFalha tipoDeFalha);

	/**
	 * Evento gerado pela composi��o quando a mesma inicia sua viagem.
	 * 
	 * @param idComposicao
	 *            Identifica��o �nica da composi��o
	 * @param instanteAtual
	 *            Instante da ocorr�ncia do evento
	 * @param idTrecho
	 *            Identifica��o �nica do trecho de onde a composi��o parte.
	 */
	public void partidaComposicao(String idComposicao, int instanteAtual,
			String idTrecho);

	/**
	 * Evento gerado pela composi��o quando esta chega ao seu destino.
	 * 
	 * @param idComposicao
	 *            Identifica��o �nica da composi��o.
	 * @param instanteAtual
	 *            Instante da ocorr�ncia do evento.
	 * @param idTrecho
	 *            Identifica��o do trecho pelo qual ocorreu a chegada.
	 */
	public void chegadaComposicao(String idComposicao, int instanteAtual,
			String idTrecho);

	/**
	 * Evento de alarme gerado pela chave, por falha de opera��o.
	 * 
	 * @param idChave
	 *            Identifica��o �nica da chave que gerou o alarme.
	 * @param instanteAtual
	 *            Instante da ocorr�ncia do evento.
	 * @param tipoDeFalha
	 *            Tipo de falha da chave.
	 */
	public void alarmeChave(String idChave, int instanteAtual,
			TipoFalha tipoDeFalha);

	/**
	 * Evento gerado pela passagem de uma composi��o por um sensor.
	 * 
	 * @param idTrecho
	 *            Identifica��o �nica do trecho que gerou o evento.
	 * @param instanteAtual
	 *            Instante da ocorr�ncia do evento.
	 * @param posicao
	 *            Posi��o do sensor que gerou o evento, relativa � extremidade A
	 *            do sensor.
	 * @param idComposicao
	 *            Identifica��o �nica da composi��o.
	 * @param velocidade
	 *            Velocidade da composi��o no instante da passagem.
	 * @param sentidoAB
	 *            Sentido da passagem (AB => true, BA => false)
	 */
	public void passagemComposicao(String idTrecho, int instanteAtual,
			float posicao, String idComposicao, float velocidade,
			boolean sentidoAB);

	/**
	 * Evento gerado pela entrada de uma composi��o numa chave.
	 * 
	 * @param idChave
	 *            Identifica��o �nica da chave que gerou o evento.
	 * @param instanteAtual
	 *            Instante da ocorr�ncia do evento.
	 * @param idComposicao
	 *            Identifica��o da composi��o que entrou na chave
	 * @param idTrechoOrigem
	 *            Identifica��o do trecho de onde veio a composi��o
	 */
	public void entradaComposicaoChave(String idChave, int instanteAtual,
			String idComposicao, String idTrechoOrigem);

	/**
	 * Evento gerado pela sa�da de uma composi��o de uma chave.
	 * 
	 * @param idChave
	 *            Identifica��o �nica da chave que gerou o evento.
	 * @param instanteAtual
	 *            Instante da ocorr�ncia do evento.
	 * @param idComposicao
	 *            Identifica��o da composi��o que saiu da chave
	 * @param idTrechoDestino
	 *            Identifica��o do trecho para onde est� indo a composi��o
	 */
	public void saidaComposicaoChave(String idChave, int instanteAtual,
			String idComposicao, String idTrechoDestino);

	/**
	 * Evento gerado a cada 'tic' do rel�gio do simulador.
	 * 
	 * @param instanteAtual
	 *            instante em que o 'tic' ocorre (relativo ao in�cio da
	 *            simula��o)
	 */
	public void tic (int instanteAtual);

}
